POV-Ray : Newsgroups : povray.general : Today's Random Advice: Mesh Scale : Re: Today's Random Advice: Mesh Scale Server Time
30 Jul 2024 04:12:50 EDT (-0400)
  Re: Today's Random Advice: Mesh Scale  
From: clipka
Date: 7 Sep 2009 15:53:00
Message: <4aa5649c@news.povray.org>
Chambers schrieb:
>> Apparently, even mesh models about 1 POV unit in total size may be too 
>> small in this respect.
> 
> Doesn't POV consider positions within 0.001 units of each other to be 
> equivalent?  This would certainly account for that.

That would only account for part of the effect I observed.

It appears that in some semi-rare cases, not only does POV-Ray ignore 
intersections closer to 0.001(?) units from the current point, but /all/ 
intersections from the same object.

After having had a closer look at the code, I have a vague idea what's 
going on there, and if I'm right, I really think it needs fixing.


Basically, it seems that what happens is as follows:

- The mesh is tested for intersections by computing all ray-triangle 
intersections; this is done in mesh coordinate space, i.e. the triangle 
vertices are never actually transformed (which allows copies of the very 
same mesh to share the mesh data regardless of transformations, 
rotations or even scaling or shearing), but the ray origin and direction 
are subject to the inverse transformations instead before performing the 
tests. Intersections "too close" are discarded right away, with "too 
close" being 1e-6 units (in /mesh/ space!).

- This list of intersections is then traversed to identify the closest 
intersection with the whole mesh.

- To determine which of all objects is closest, this process is 
performed for all objects; if an object's closest intersection is 
farther away than an intersection with some other object already found, 
it is ignored; likewise, if an object is "too close" (being 1e-4 units 
in /global/ space), it is ignored as well.

Note the fallacy here: This process causes /all/ intersections with a 
particular object to be ignored if the /closest/ of them is "too close".

This wouldn't be a problem if intersections "too close" were already 
filtered out in the ray-mesh-intersection test, but that is not the 
case: Although a "too close" filtering is done, it (a) uses a more 
"forgiving" numeric constant, and (b) is done in a completely different 
coordinate space.


If this is really what is happening, then it means that meshes are 
generally prone to exhibit edge artifacts whenever they are not scaled 
to at least 100 times their "raw" dimensions.


Post a reply to this message

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.